Skip to main content

ConceptFactory: Facilitate 3D Object Knowledge Annotation with Object Conceptualization

Intro​

本文提出ConceptFactory,这是一套全新框架,通过广义概念(跨物体类别共享的几何结构模板)识别三维物体(即物体概念化),提升三维物体知识的标注效率 (语义、位姿以及可交互性标注)

object conceptualization: Describe the shape of an object with generalized geometric concepts, or in other words, object conceptualization.

两个部分

  • ConceptFactory Suite 一个统一工具箱,采用标准概念模板库(STL-C),驱动基于网页的对象概念化平台 263 个概念模板

  • ConceptFactory Asset 一个通过 ConceptFactory 套件获取的大量概念化对象集合 包含来自 39 个类别的 4380 个物体,共计 39000 个模板实例、295000 个参数。

把 3D 椅子从多个角度渲染成 2D 图片(正视图、侧视图、俯视图…) 在若干 2D 图片标注 然后反投影得到 3D 标注

人工 做网格拆分 + 合并 最后,每一个独立的网格块是一个部件

ConceptFactory Suite​

Standard Concept Template Library 简称STL-C

  • 几何模板:参数化的基础几何体模板,如圆柱模板
  • 概念模板:由多个几何模板(或其他概念模板)按约束组合而成的,如把手

该库收纳了大量日常生活中高频出现的通用几何模板。每一个概念模板都以 Python 类模板的形式实现;输入模板参数后,即可实例化为一个能够描述三维形状的概念实例

图中就是不同几何模板 以及不同参数化后得到的 概念实例

STL-C 几何模板与参数化后的概念实例

目前已经在 STL‑C 中一共收录了 263 个互不重复的概念模板。经测试,这些模板能够完整覆盖 39 个类别下的 4380 个物体

Conceptualization Platform​

流程

  1. 按照结构层级,将每一类物体拆分为若干部件
  2. 针对物体的每一个部件,STL‑C 库中挑选一个内置概念与该部件几何结构最匹配的模板
  3. 接着精细地为模板设置参数,使生成的概念实例能够有效近似该部件
  4. 随后通过参数化空间变换,对这些经过参数化的模板实例进行空间摆放,让它们分别与物体上对应的部件对齐,最终完成对该物体的概念化描述

此时几何细节还存在偏差 借鉴 BPS 算法的思路

  1. 对物体表面每个点 x,在概念实例 mesh 表面找最近点 y
  2. 算位移 d = x − y
  3. 对概念 mesh 的每个顶点,把附近的位移 d 按距离加权平均,算出顶点该移动多少
  4. 移动顶点,mesh 变形,贴近真实物体

BPS 变形流程:点云特征提取、简化与重建

概念化平台​

网页端交互界面 coming soon​

如图

概念化平台网页端交互界面

参数优化器​

概念实例可通过以下两步完成可微渲染

  1. 对内部子几何模板的参数执行可微运算
  2. 对各个几何模板的默认模板形状执行可微形变(通过对顶点做可微的形变操作(缩放、平移、ReLU 截断),把默认形状变成参数指定的形状)

采用 Point2Mesh 损失函数,大量繁琐的参数调节工作可以自动完成,用户仅需对优化效果不佳的参数进行精细化调整即可

Point2Mesh 损失函数
  • 点云:

P={p1,p2,…,pN}P = \{p_1, p_2, \dots, p_N\}

共 N 个点(真实物体部件)

  • 网格 M,由 K 个三角面组成:

F={f1,f2,…,fK}F = \{f_1, f_2, \dots, f_K\}

(概念实例)

  • 点 p 到三角面 f 的最短欧氏距离:

dist(p,f)\text{dist}(p, f)

点到面

点云中每个点,找到网格上离它最近的面,算距离,取平均:

dpf=1N∑i=1Nmin⁡f∈F  dist(pi,f)d_{\text{pf}} = \frac{1}{N} \sum_{i=1}^{N} \min_{f \in F} \; \text{dist}(p_i, f)

面到点

网格上每个面,找到点云中离它最近的点,算距离,取平均:

dfp=1K∑j=1Kmin⁡p∈P  dist(fj,p)d_{\text{fp}} = \frac{1}{K} \sum_{j=1}^{K} \min_{p \in P} \; \text{dist}(f_j, p)

总损失

LPoint2Mesh=dpf+dfp\mathcal{L}_{\text{Point2Mesh}} = d_{\text{pf}} + d_{\text{fp}}

Procedural Knowledge Annotation​

具体标注机制

两类知识类型

  • 基于区域的知识
  • 基于位姿的知识

程序化知识标注:语义、部件位姿、可抓取区域与抓取位姿

(a‑b) 基于区域的知识(如语义标签、可操作区域)通过区域判别函数实现。(c‑d) 基于位姿的知识(如部件位姿、抓取位姿)借助局部坐标系到世界坐标系的坐标变换实现

*抓取区域不是人工涂的,而是用数学不等式定义的:在局部坐标系下,满足长 / 宽 / 高范围内的点就是可抓取的

标注对比 左边传统方法 右边本文

标注对比:Affordance、语义分割与部件位姿

Experiment​

Semantic SegmentationCross Category SegmentationPart Pose Estimation
PointTransformerPointNet++GAPartNet
mAccmIoUmAccmIoUmAPmAP 50mIoUA 5A 10
Original90.075.488.867.230.037.742.629.155.7
ConFac89.875.688.867.330.638.542.830.356.9
∆-0.20.20.00.10.60.80.21.21.2

用 ConceptFactory 自动生成的标注训练出来的模型,在跨类别泛化任务上,和用人工原始标注训练的效果一样好 甚至还略高一点